package model.dao;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;



import model.Turma;

public class TurmaDaoImpl {
		List<Turma> listaTurmas = new ArrayList<Turma>();
		List<Integer> listaIdAlunos = new ArrayList<Integer>();
		
	public void cadastrar (int ano, String periodo, String local, String horario, int numeroVagas,List<Integer> listaIdProfessores, int idDisciplina) {
		Turma turma = new Turma(ano, periodo, local, horario, numeroVagas, listaIdProfessores, idDisciplina);
		listaTurmas.add(turma);
	}
	
	public boolean carregar(String arquivo)
			throws FileNotFoundException, IOException {

		try{
			String linha = "";
			String periodo = "";
			String local = "";
			String horario = "";
			int ano = 0;
			int numeroVagas = 0;
			int idDisciplina = 0;
			int idProfessor;
			int idAluno;
			List<Integer> listaIdProfessores = new ArrayList<Integer>();
			
			File file = new File(arquivo);

			if (!file.exists()) {
				return false;
			}

			BufferedReader br = new BufferedReader(new FileReader(arquivo));

			while( (linha = br.readLine()) != null ){
				String[] line = linha.split("[;]");
				int i = 0;
				for (String str : line){
					i++;
					switch(i){
						case 1 : ano = Integer.parseInt(str);
							break;
						case 2 : periodo = str;
							break;
						case 3 : local = str;
							break;
						case 4 : horario = str;
							break;
						case 5 : numeroVagas = Integer.parseInt(str);
							break;
						case 6 : idDisciplina = Integer.parseInt(str);
							break;	
						case 7 : 
							String[] line1 = str.split("[#]");
							for (String str1 : line1){
								idProfessor = Integer.parseInt(str1);
								listaIdProfessores.add(idProfessor);
							}
							break;
						default :
							String[] line2 = str.split("[#]");
							for (String str2 : line2){
								idAluno = Integer.parseInt(str2);
								listaIdAlunos.add(idAluno);
							}	
					}
				}
				this.cadastrar(ano, periodo, local, horario, numeroVagas, listaIdProfessores, idDisciplina);
				listaIdProfessores.clear();
			}
			br.close();
		}catch(NumberFormatException e){
			System.out.println("Nao e possivel carregar o arquivo de Turma");
			System.out.println("\n\nPrograma Finalizado!");
			System.exit(1);
		}
		return true;
	}
	
	
	public void salvar(String arquivo, boolean adicionar)
			throws IOException {
		int ano;
		String periodo;
		String local;
		String horario;
		int numeroVagas;
		int idDisciplina;
		File file = new File(arquivo);
		file.delete();
		FileWriter fw = new FileWriter(arquivo, adicionar);
		for (Turma turma : this.listaTurmas) {
			ano = turma.getAno();
			periodo = turma.getPeriodo();
			local = turma.getLocal();
			horario = turma.getHorario();
			numeroVagas = turma.getNumeroVagas();
			idDisciplina = turma.getIdDisciplina();
			List<Integer> listaIdProfessores = turma.getListaIdProfessores();
			fw.write(ano+";"+periodo+";"+local+";"+horario+";"+numeroVagas+";"+idDisciplina+";");
			for (Integer i : listaIdProfessores) {
				fw.write(i+"#");				
			}
			fw.write(";");
			for (Integer i : listaIdAlunos) {
				fw.write(i+"#");				
			}
			fw.write(";\n");
		}
		fw.close();
	}
	
	public List<Turma> getlistaTurmas(){
		return listaTurmas;
	}
	
	public List<Integer> getlistaIdAlunos(){
		return listaIdAlunos;
	}
	
	public void setlistaIdAlunos(List<Integer> listaIdAlunos){
		this.listaIdAlunos.addAll(listaIdAlunos);
	}
}
